/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.lacibMusic.control;

import FC.KNN.KNN;
import FC.AG.GA;
import br.com.lacibMusic.entidades.Perfis;
import br.com.lacibMusic.entidades.Pontuacao;
import br.com.lacibMusic.rn.PerfisRN;
import br.com.lacibMusic.rn.PontuacaoRN;
import java.util.List;

/**
 *
 * @author AlanmLira
 */
public class Recomendacao {

    public int recomendacaoKNNeAG(int kn, int idPontuacao, int tamPop, int numGera, float probMuta) {
        String populacaoInicial[] = new KNN().kVizinhosProximos(kn, idPontuacao);
        Pontuacao pon = new PontuacaoRN().obter(idPontuacao);
        String pontuacaoUsuario = (pon.getRock() + "" + pon.getJazz() + "" + pon.getLatin() + ""
                + pon.getHardcore() + "" + pon.getPop() + "" + pon.getCountry() + "" + pon.getBlues() + ""
                + pon.getFolk() + "" + pon.getHiphop() + "" + pon.getReb() + "" + pon.getEletronic());
        String valorFinal = new GA().executaGA(tamPop, numGera, probMuta, pontuacaoUsuario, populacaoInicial).replaceAll("String:", "");
        System.out.println("ValorFInal: " + valorFinal);
        return verificaPerfil(valorFinal);
    }

    public int verificaPerfil(String valorFinalAG) {
        List<Perfis> perfis = new PerfisRN().obterTodos();
        double avaliacao;
        double avaliacaoPerfil = -10;
        int idPerfil = 0;

        //System.out.println("valor: " + valor + "  t: " + this.valor.length());
        for (int j = 0; j < perfis.size(); j++) {
            double nota = 0;
            String valor = (perfis.get(j).getRock() + "" + perfis.get(j).getJazz() + ""
                    + perfis.get(j).getLatin() + "" + perfis.get(j).getHardcore() + ""
                    + perfis.get(j).getPop() + "" + perfis.get(j).getCountry() + ""
                    + perfis.get(j).getBlues() + "" + perfis.get(j).getFolk() + ""
                    + perfis.get(j).getHiphop() + "" + perfis.get(j).getReb() + ""
                    + perfis.get(j).getEletronic());

            for (int i = 0; i < valor.length(); i++) {
                if (valor.charAt(i) != ',') {
                    int x = Integer.parseInt(valor.charAt(i) + "");
                    int y = Integer.parseInt(valorFinalAG.charAt(i) + "");
                    nota += Math.abs(x - y + 0.0f);
                }
            }
            System.out.println("Nota: " + nota);

            avaliacao = (1 - (nota / 100));
            if (avaliacaoPerfil < avaliacao) {
                avaliacaoPerfil = avaliacao;
                idPerfil = perfis.get(j).getId();
            }
        }
        System.out.println("Avaliacao: " + avaliacaoPerfil + " - idPerfil:" + idPerfil);
        return idPerfil;
    }
}
